import android.content.Context
import java.io.File
import java.io.FileOutputStream
import java.io.IOException

object AssetUtils {

    /**
     * 将 assets 中的文件或文件夹复制到内部存储，并返回目标路径
     * @param assetPath assets 中的相对路径（如 "vosk-model-small-en-us-0.15"）
     * @return 复制后的绝对路径，失败时返回 null
     */
    fun copyAssetToInternalStorage(context: Context, assetPath: String): String? {
        val targetDir = File(context.filesDir, assetPath)
        if (targetDir.exists()) {
            return targetDir.absolutePath  // 已存在则直接返回
        }

        return try {
            if (context.assets.list(assetPath).isNullOrEmpty()) {
                // 如果是文件，直接复制
                copySingleFile(context, assetPath, targetDir)
            } else {
                // 如果是文件夹，递归复制
                targetDir.mkdirs()
                context.assets.list(assetPath)?.forEach { file ->
                    copyAssetToInternalStorage(context, "$assetPath/$file")
                }
            }
            targetDir.absolutePath
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }

    private fun copySingleFile(context: Context, assetPath: String, targetFile: File): Boolean {
        return try {
            context.assets.open(assetPath).use { input ->
                FileOutputStream(targetFile).use { output ->
                    input.copyTo(output)
                }
            }
            true
        } catch (e: IOException) {
            e.printStackTrace()
            false
        }
    }
}